package com.f21.f21assessoria.model.modalidade;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

import javax.faces.bean.CustomScoped;
import javax.persistence.*;

import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import com.f21.f21assessoria.enums.Meses;

@Entity
public class Modalidade implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private long id;
	private String nome;
	@Column(length = 150)
	private String descricao;
	@ElementCollection(fetch = FetchType.LAZY)
	@Column(columnDefinition = "integer")
	@Type(type = "com.f21.f21assessoria.enums.GenericEnumUserType", parameters = { @Parameter(name = "enumClass", value = "com.f21.f21assessoria.enums.Meses") })
	private List<Meses> mesesCobranca;
	@OneToMany(fetch = FetchType.EAGER, mappedBy = "modalidade", cascade = CascadeType.ALL)
	private List<Turma> turmas;

	private Double preco;

	public Modalidade() {
		turmas = new ArrayList<Turma>();
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public List<Turma> getTurmas() {
		return turmas;
	}

	public void addTurma(Turma turma) {
		if (getTurmas().contains(turma)) {
			int indexOf = getTurmas().indexOf(turma);
			getTurmas().remove(indexOf);
			getTurmas().add(indexOf, turma);
		} else {
			turma.setModalidade(this);
			getTurmas().add(turma);
		}
	}

	public void setTurma(List<Turma> turma) {
		this.turmas = turma;
	}

	public Double getPreco() {
		return preco;
	}

	public void setPreco(Double preco) {
		this.preco = preco;
	}

	public long getId() {
		return id;
	}

	public List<Meses> getMesesCobranca() {
		return mesesCobranca;
	}

	public void setId(long id) {
		this.id = id;
	}

	public void setMesesCobranca(List<Meses> mesesCobranca) {
		this.mesesCobranca = mesesCobranca;
	}
}
